n = int(input())
a=list(map(int,input().split()))
m=a[0]
d=1
for i in range(9):
if a[i]<=m:
m=a[i]
d=i+1
if m>n:
print(-1)
exit()
ans=list(str(d)*(n//m))
rem=n-m*(n//m)
for i in range(len(ans)):
if rem<=0:
break
for j in range(8,d-1,-1):
if a[j]-a[d-1]<=rem:
ans[i]=str(j+1)
rem-=a[j]-a[d-1]
break
print(''.join(ans))
#include <bits/stdc++.h>
using namespace std;
int v, a[10], min_digit, digits;
string ans;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> v;
for(int i = 1; i <= 9; i++) {
cin >> a[i];
if(i == 1 || a[i] <= a[min_digit]) {
min_digit = i;
}
}
digits = v/a[min_digit];
v -= (v/a[min_digit])*a[min_digit];
//subtract the min digit from all a
for(int i = 9; i >= min_digit; i--) {
a[i] -= a[min_digit];
}
for(int i = 1; i <= digits; i++) {
bool flag = false;
for(int j = 9; j > min_digit; j--){
if(v >= a[j]){
v -= a[j];
ans.push_back(j + '0');
flag = true;
break;
}
}
if(!flag) {
ans.push_back(min_digit + '0');
}
}
if(digits == 0) {
cout << -1;
} else {
cout << ans;
}
}
406. Queue Reconstruction by Height | 380. Insert Delete GetRandom O(1) |
332. Reconstruct Itinerary | 368. Largest Divisible Subset |
377. Combination Sum IV | 322. Coin Change |
307. Range Sum Query - Mutable | 287. Find the Duplicate Number |
279. Perfect Squares | 275. H-Index II |
274. H-Index | 260. Single Number III |
240. Search a 2D Matrix II | 238. Product of Array Except Self |
229. Majority Element II | 222. Count Complete Tree Nodes |
215. Kth Largest Element in an Array | 198. House Robber |
153. Find Minimum in Rotated Sorted Array | 150. Evaluate Reverse Polish Notation |
144. Binary Tree Preorder Traversal | 137. Single Number II |
130. Surrounded Regions | 129. Sum Root to Leaf Numbers |
120. Triangle | 102. Binary Tree Level Order Traversal |
96. Unique Binary Search Trees | 75. Sort Colors |
74. Search a 2D Matrix | 71. Simplify Path |